
using System;
using Core.Base;
using Core.Contracts.Enums;
using Core.Contracts.Interfaces;
using Core.Features;
using Core.Resources;
using Core.Extensions;

namespace Core.Items.Robots
{
    /// <summary>
    /// Vagabond mk2 robot class
    /// </summary>
    
    public sealed class VagabondMk2 : RobotBase
    {
        /// <summary>
        /// Create a new instance of the <see cref="T:Core.Items.Robots.VagabondMk2"/> class.
        /// </summary>
        public VagabondMk2()
            : base(
            "Vagabond Mk2",
            Traduction.desc_vagabond,
            FactionsEnum.Nuimqol,
            RobotTechnologyLevel.Mk2,
            RobotSizesEnum.Mech,
            new ISlot[]{ 
				new Slot(0, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret|SlotTypesEnum.Misc, SizesEnum.Small|SizesEnum.Medium),
				new Slot(1, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret|SlotTypesEnum.Misc, SizesEnum.Small|SizesEnum.Medium),
				new Slot(2, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret, SizesEnum.Small|SizesEnum.Medium),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules), },
            new IFeature<object>[]{ 
				new AccumulatorCapacity<double>(2400),
				new AccumulatorRechargeTime<double>(360),
				new CpuPerformance<double>(450),
				new ReactorPerformance<double>(600),
				new ArmorAmount<double>(1250),
				new ChemicalResistance<double>(30),
				new KineticResistance<double>(45),
				new SeismicResistance<double>(150),
				new ThermalResistance<double>(10),
                new ChemicalEHP<double>(0),
                new KineticEHP<double>(0),
                new SeismicEHP<double>(0),
                new ThermalEHP<double>(0),
				new SurfaceHitSize<double>(7.00),
				new InterferenceEmission<double>(7.00),
				new InterferenceMinimum<double>(105.00),
				new InterferencePeak<double>(375.00),
				new InterferenceRadius<double>(200.00),
				new LockingRange<double>(350),
				new LockingTime<double>(12.50),
				new MaximumTargets<double>(9),
				new MissileGuidanceFailure<double>(0.1),
				new SensorStrength<double>(125),
				new SignalDetection<double>(100.00),
				new SignalMasking<double>(100.00),
				new ReloadingTime<double>(10),
				new CargoCapacity<double>(7.50),
				new RobotMass<double>(18420.00),
				new SlopeCapacity<double>(45),
				new TopSpeed<double>(61.20),
				new Volume<double>(16.00),
                new DemobilizerResistance<double>(0),
                new CriticalHitChance<double>(0),
                },

             new IBonusModifier[]
                {
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.EcmStrength, 0.05  ){ Unit = UnitsEnum.Percentage, DisplayName = "ECM strength" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.SensorSuppressorStrength, 0.05  ){ Unit = UnitsEnum.Percentage, DisplayName = "Sensor suppressor strength" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.EcmAccumulatorUsage, -0.05  ){ Unit = UnitsEnum.Percentage, DisplayName = "ECM accumulator usage" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.SensorSuppressorAccumulatorUsage, -0.05  ){ Unit = UnitsEnum.Percentage, DisplayName = "Sensor suppressor accumulator usage" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.DemobilizerAccumulatorUsage, -0.05  ){ Unit = UnitsEnum.Percentage, DisplayName = "Demobilizer accumulator usage" },
                    new BonusModifier<SpecOpsRobotControl>( FeatureTypesEnum.Robot, FeaturesEnum.SignalMasking, 0.01){ Unit = UnitsEnum.Percentage, DisplayName = "Signal Masking Amount"},
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.ArmorRepairAmount, 0.05  ){ Unit = UnitsEnum.Percentage, DisplayName = "Armor repair amount" },
                    
                    new BonusModifier<SpecOpsRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.DemobilizerOptimal, 0.02){ Unit = UnitsEnum.Percentage, DisplayName = "Demobilizer optimal range"}, 
                    new BonusModifier<SpecOpsRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.EcmOptimal, 0.02){ Unit = UnitsEnum.Percentage, DisplayName = "ECM optimal range"}, 
                    new BonusModifier<SpecOpsRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.SensorSuppressorOptimal, 0.02){ Unit = UnitsEnum.Percentage, DisplayName = "Sensor suppressor optimal range"}, 
                    new BonusModifier<SpecOpsRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.SapModuleOptimal, 0.02){ Unit = UnitsEnum.Percentage, DisplayName = "SAP optimal range"}, 
                    new BonusModifier<SpecOpsRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.InterferenceModuleOptimal, 0.02){ Unit = UnitsEnum.Percentage, DisplayName = "Interference module optimal range"}, 
                },
            new ICondition<IExtension>[]
                {
                    new ExtensionCondition<AdvancedRobotics>(3),
                    new ExtensionCondition<NuimqolRobotControl>(9),
                    new ExtensionCondition<SpecOpsRobotControl>(5),
                })
        {
        }
    }
}